Uno de los grandes problemas de las redes sociales es la creación de perfiles falsos debido a que implica desde creaciones superficiales de seguidores hasta tráfico de influencias y suplantación de identidad, una de las redes sociales que cuenta con más cuentas falsas es Instagram. Para eso, se quiere identificar las características y la probabilidad de un usuario de Instagram sea clasificado como una cuenta 'real' o una cuenta 'spammer'.
Para más información de los datos se encuentran en: https://www.kaggle.com/free4ever1/instagram-fake-spammer-genuine-accounts
Primero, vamos a importar los datos y crear una descripción para entender las variables descritas en los datos. Para importar los datos vamos a utilizar Pandas (Que por defecto está instalado), y para el análisis de datos vamos a usar Pandas-Profiling.
Para instalar un nuevo paquete se puede utilizar cualquiera de los siguientes comandos:
!conda install pandas-profiling -y
!pip install pandas-profiling[notebook]
import pandas as pd
import pandas_profiling
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
pandas_profiling.ProfileReport(train)
Es importante siempre tener dos conjuntos de datos, uno de entrenamiento y uno de test. Además es importante dividir los datos en las variables que queremos aprender como X y la respuesta que se desea obtener como Y, Así se realiza con los dos conjuntos de datos.
X_train, Y_train = train.drop(['fake'],axis=1), train['fake']
X_test, Y_test = test.drop(['fake'],axis=1), test['fake']
display(X_train.head())
Se va a utilizar la librería scikit-learn la cual está desarrollado para entrenar modelos simples para tareas de regresión, asociación, agrupación o clasificación hasta entrenamientos más complejos como Máquinas de Soporte Vectorial, Random Forest y Redes neuronales de 1 y 2 capas.
Para más información sobre esta librería, tutoriales y documentación pueden visitar la Página Oficial.
Para instalarlo lo puede hacer a través del siguiente código
!pip install scikit-learn
from sklearn import tree
clf = tree.DecisionTreeClassifier()
clf.fit(X_train, Y_train)
import graphviz
dot_data = tree.export_graphviz(clf, out_file=None,
feature_names=list(X_train.columns),
class_names=['real','fake'],
filled=True, rounded=True,
special_characters=True)
graph = graphviz.Source(dot_data)
graph
from sklearn import metrics
report_train = metrics.classification_report(Y_train, clf.predict(X_train))
report_test = metrics.classification_report(Y_test, clf.predict(X_test))
print("Train Report \n", report_train)
print("Test Report \n", report_test)
clf_lim = tree.DecisionTreeClassifier(max_depth=5)
clf_lim.fit(X_train, Y_train)
dot_data = tree.export_graphviz(clf_lim, out_file=None,
feature_names=list(X_train.columns),
class_names=['real','fake'],
filled=True, rounded=True,
special_characters=True)
graph = graphviz.Source(dot_data)
graph
report_train = metrics.classification_report(Y_train, clf_lim.predict(X_train))
report_test = metrics.classification_report(Y_test, clf_lim.predict(X_test))
print("Train Report \n", report_train)
print("Test Report \n", report_test)
sklearn? ¿CHAID o ID3?